Allocation of computer resources to meet different requests can be a very difficult task, especially when there are many variables to be considered in matching the resources with the requests. For instance, in the context of automated testing of computer software and hardware, there may be hundreds of test requests and thousands of test computers to be assigned to the tests. In this context, the test machines are the resources to be allocated. The test requests may ask for different numbers of test machines with different specified configurations, and each test request has to be satisfied by allocating the required number of computers with the specified configurations from the pool of available test machines. The sheer numbers of the test requests and test machines can make the cross-matching of the requests and the available physical machines a daunting task. Moreover, the dynamic nature of the availability of the testing machines further increases the complexity of the resource allocation operation, as the test machines may be currently used for running test cases or being released from test cases and becoming available to run other test cases[VR1]. The dynamic nature of the constantly changing machine configurations also has to be taken into consideration. For instance, a machine may have a different operating system installed on it after a test run.